/*
 * task_RGB.h
 *
 *  Created on: Jul 23, 2024
 *      Author: citunhk
 */

#ifndef TASK_RGB_H_
#define TASK_RGB_H_
#include "../../03_FML/OS/fml_task.h"
#include "../../03_FML/RGB/ws2812b.h"

//#define DEFAULT_MODE  /* 默认模式 */
#define THERMO_MODE     /* 赛默飞模式 */

ws2812b_t RGB;

//static void task_RBG_work_entry(void *parameter)
//{
//    static uint8_t cnt = 0;
//    static uint8_t head = 0;
//    static uint8_t length = 2;
//    static uint8_t direction = 0; /* 方向 */
//    static uint8_t red = 0xff;
//    static uint8_t green = 0x80;
//    static uint8_t blue = 0x80;
//    const RGB_Val_t RGB_Val_Red = COLOR_VAL_RED;
//    const RGB_Val_t RGB_Val_Orange = COLOR_VAL_ORANGE;
//    const RGB_Val_t RGB_Val_SKY_BLUE = COLOR_VAL_SKY_BLUE;
//    uint8_t mode = 0;
//
//    RGB.readyLength = 4;
//    RGB.resetLength = 2;
//
//    WS2812B_init();
//    WS2812B_showAllSameColor(&RGB, COLOR_VAL_NONE);
//
//    while(1)
//    {
//        switch (mode)
//        {
//            case CHEAK_SELF_MODE:
//                if(direction == 0)  /* 如果方向为正向 */
//                {
//                    if(head < RGB.pixelLength - length) /* 如果可以移动 */
//                    {
//                        WS2812B_showOneFlowLight(&RGB, COLOR_VAL_WHITE, head, length);  /* 按要求点亮RGB */
//                        head++; /* 向正方向移动头部指针 */
//                    }
//                    else    /* 如果不可以移动 */
//                    {
//                        direction = 1; /* 切换方向为反向 */
//                        WS2812B_showOneFlowLight(&RGB, COLOR_VAL_WHITE, head, length);  /* 按要求点亮RGB */
//                        head--; /* 向反方向移动头部指针 */
//                    }
//                }
//                else    /* 反向同理 */
//                {
//                    if(head > 0)
//                    {
//                        WS2812B_showOneFlowLight(&RGB, COLOR_VAL_WHITE, head, length);
//                        head--;
//                    }
//                    else
//                    {
//                        direction = 0;
//                        WS2812B_showOneFlowLight(&RGB, COLOR_VAL_WHITE, head, length);
//                        head++;
//                    }
//                }
//                rt_mb_recv(&mb_RGBmode, (rt_ubase_t *)&mode, 40);
//                break;
//            case STANDBY_MODE:
//#ifdef DEFAULT_MODE
//                WS2812B_showAllSameColor(&RGB, COLOR_VAL_ORANGE);
//                rt_mb_recv(&mb_RGBmode, (rt_ubase_t *)&mode, RT_WAITING_FOREVER);
//#endif
//#ifdef THERMO_MODE
//                if(cnt < 30)
//                {
//                    red = RGB_Val_SKY_BLUE.single.r - RGB_Val_SKY_BLUE.single.r * cnt / 31;
//                    green = RGB_Val_SKY_BLUE.single.g - RGB_Val_SKY_BLUE.single.g * cnt / 31;
//                    blue = RGB_Val_SKY_BLUE.single.b - RGB_Val_SKY_BLUE.single.b * cnt / 31;
//                    cnt++;
//                }
//                else if(cnt < 60)
//                {
//                    red = RGB_Val_SKY_BLUE.single.r - RGB_Val_SKY_BLUE.single.r * (60 - cnt) / 31;
//                    green = RGB_Val_SKY_BLUE.single.g - RGB_Val_SKY_BLUE.single.g * (60 - cnt) / 31;
//                    blue = RGB_Val_SKY_BLUE.single.b - RGB_Val_SKY_BLUE.single.b * (60 - cnt) / 31;
//                    cnt++;
//                }
//                else
//                {
//                    cnt = 0;
//                }
//                WS2812B_showAllSameColor(&RGB, WS2812B_pieceRGB(red, green, blue));
//                rt_mb_recv(&mb_RGBmode, (rt_ubase_t *)&mode, 50);
//#endif
//                break;
//            case RUNNING_MODE:
//#ifdef DEFAULT_MODE
//                WS2812B_showAllSameColor(&RGB, COLOR_VAL_GREEN);
//#endif
//#ifdef THERMO_MODE
//                WS2812B_showAllSameColor(&RGB, COLOR_VAL_SKY_BLUE);
//#endif
//                rt_mb_recv(&mb_RGBmode, (rt_ubase_t *)&mode, RT_WAITING_FOREVER);
//                break;
//            case WARNING_MODE:
//#ifdef DEFAULT_MODE
//                if(cnt < 10)
//                {
//                    red = RGB_Val_Red.single.r - RGB_Val_Red.single.r * cnt / 11;
//                    cnt++;
//                }
//                else if(cnt < 20)
//                {
//                    red = RGB_Val_Red.single.r - RGB_Val_Red.single.r * (20 - cnt) / 11;
//                    cnt++;
//                }
//                else
//                {
//                    cnt = 0;
//                }
//                WS2812B_showAllSameColor(&RGB, WS2812B_pieceRGB(red, 0x00, 0x00));
//                rt_mb_recv(&mb_RGBmode, (rt_ubase_t *)&mode, 50);   /* 慢速渐变红色 */
//#endif
//#ifdef THERMO_MODE
//                WS2812B_showAllSameColor(&RGB, COLOR_VAL_ORANGE);
//                rt_mb_recv(&mb_RGBmode, (rt_ubase_t *)&mode, RT_WAITING_FOREVER);
//#endif
//                break;
//            case FAULT_MODE:
//#ifdef DEFAULT_MODE
//                if(cnt < 10)
//                {
//                    red = RGB_Val_Red.single.r - RGB_Val_Red.single.r * cnt / 11;
//                    cnt++;
//                }
//                else if(cnt < 20)
//                {
//                    red = RGB_Val_Red.single.r - RGB_Val_Red.single.r * (20 - cnt) / 11;
//                    cnt++;
//                }
//                else
//                {
//                    cnt = 0;
//                }
//                WS2812B_showAllSameColor(&RGB, WS2812B_pieceRGB(red, 0x00, 0x00));
//                rt_mb_recv(&mb_RGBmode, (rt_ubase_t *)&mode, 25);   /* 快速渐变红色 */
//#endif
//#ifdef THERMO_MODE
//                WS2812B_showAllSameColor(&RGB, COLOR_VAL_RED);
//                rt_mb_recv(&mb_RGBmode, (rt_ubase_t *)&mode, RT_WAITING_FOREVER);
//#endif
//                break;
//            case MAINTAIN_MODE:
//                if(cnt < 20)
//                {
//                    red = RGB_Val_Orange.single.r - RGB_Val_Orange.single.r * cnt / 21;
//                    green = RGB_Val_Orange.single.g - RGB_Val_Orange.single.g * cnt / 21;
//                    cnt++;
//                }
//                else if(cnt < 40)
//                {
//                    red = RGB_Val_Orange.single.r - RGB_Val_Orange.single.r * (40 - cnt) / 21;
//                    green = RGB_Val_Orange.single.g - RGB_Val_Orange.single.g * (40 - cnt) / 21;
//                    cnt++;
//                }
//                else {
//                    cnt = 0;
//                }
//                WS2812B_showAllSameColor(&RGB, WS2812B_pieceRGB(red, green, 0x00));
//                rt_mb_recv(&mb_RGBmode, (rt_ubase_t *)&mode, 50);   /* 慢速渐变橘色 */
//                break;
//            default:/* 异常模式 */
//                WS2812B_showRainbowFlow(&RGB);
//                rt_mb_recv(&mb_RGBmode, (rt_ubase_t *)&mode, 50);   /* 快速流水彩色 */
//                break;
//        }
//    }
//}

void bll_RGB(void);


#endif
